﻿
// lambda
//#include <iostream>
//
//using namespace std;
//
//int main()
//{
//	//auto add1 = [](int x, int y) {return x + y; };
//	//
//	//cout << add1(1, 11) << endl;
//	//
//	//auto func1 = []() {cout << "hello world" << endl; };
//	//
//	//func1();
//
//
//
//	return 0;
//}

//#include <iostream>
//#include<functional>
//using namespace std;
//
//int f(int a, int b)
//{
//	return a + b;
//}
//
//struct Functor
//{
//public:
//	int operator() (int a, int b)
//	{
//		return a + b;
//	}
//};
//
//class Plus
//{
//public:
//	Plus(int n = 10)
//		:_n(n)
//	{}
//
//	static int plusi(int a, int b)
//	{
//		return a + b;
//	}
//
//	double plusd(double a, double b)
//	{
//		return (a + b) * _n;
//	}
//private:
//	int _n;
//};
//
//int main()
//{
//	// 包装各种可调用对象
//	function<int(int, int)> f1 = f;
//	function<int(int, int)> f2 = Functor();
//	function<int(int, int)> f3 = [](int a, int b) {return a + b; };
//	cout << f1(1, 1) << endl;
//	cout << f2(1, 1) << endl;
//	cout << f3(1, 1) << endl;
//
//	// 包装静态成员函数
//	// 成员函数要指定类域并且前面加&才能获取地址
//	function<int(int, int)> f4 = &Plus::plusi;
//	cout << f4(1, 1) << endl;
//
//	function<double(Plus*, double, double)> f5 = &Plus::plusd;
//	Plus ps;
//	cout << f5(&ps, 1, 1) << endl;
//
//	function<double(Plus&, double, double)> f6 = &Plus::plusd;
//	cout << f6(ps, 1, 1) << endl;
//	
//	function<double(Plus&&, double, double)> f7 = &Plus::plusd;
//	cout << f7(Plus(), 1, 1) << endl;
//
//	return 0;
//}

//#include <iostream>
//
//using namespace std;
//
//const int N = 10;
//int n = 9;
//int a[N][N];
//bool row[N][N], col[N][N], st[N][N][N];
//
//bool dfs(int i, int j)
//{
//	if (j == n)
//	{
//		i++;
//		j = 0;
//	}
//
//	if (i == n)
//		return true;
//
//	if (a[i][j]) dfs(i, j + 1);
//
//	for (int x = 1; x <= 9; x++)
//	{
//		if (row[i][x] || col[j][x] || st[i / 3][j / 3][x]) continue; // 剪枝 
//		row[i][x] = col[j][x] = st[i / 3][j / 3][x] = true;
//		a[i][j] = x;
//		if (dfs(i, j + 1)) return true;
//		row[i][x] = col[j][x] = st[i / 3][j / 3][x] = false;
//		a[i][j] = 0;
//	}
//	return false;
//}
//
//int main()
//{
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 0; j < n; j++)
//		{
//			cin >> a[i][j];
//			int x = a[i][j];
//			if (x)
//			{
//				// 标记⼀下 
//				row[i][x] = col[j][x] = st[i / 3][j / 3][x] = true;
//			}
//		}
//	}
//
//	dfs(0, 0);
//
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 0; j < n; j++)
//		{
//			cout << a[i][j] << " ";
//		}
//		cout << endl;
//	}
//
//	return 0;
//}